SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO
CREATE PROCEDURE dbo.paCalcularTodosLosPuntajes

@Convocatoria INT,
@Nivel INT,
@Ciclo INT

AS
SET NOCOUNT ON
DECLARE @Formula VARCHAR(100)
DECLARE @Concepto INT
DECLARE @Inscripcion INT
DECLARE @Error INT
DECLARE   @inscriptos as int

declare @contador as int

set @contador = 0


BEGIN TRANSACTION


	-- Si existen calificaciones para la inscripcion, se elimiman...
	/*IF EXISTS( SELECT @inscriptos=count(*)   FROM tb_CalificacionesDeInscripcion CI INNER JOIN tb_InscripcionesConvocatorias I ON I.IdInscripcionConvocatoria = CI.Inscripcion INNER JOIN tb_Convocatorias C ON C.IdConvocatoria = I.Convocatoria  WHERE C.IdConvocatoria = @Convocatoria AND I.Nivel = @Nivel AND I.Ciclo = @Ciclo) 
	BEGIN 

	SELECT @inscriptos=count(*) FROM tb_CalificacionesDeInscripcion CI INNER JOIN tb_InscripcionesConvocatorias I ON I.IdInscripcionConvocatoria = CI.Inscripcion INNER JOIN tb_Convocatorias C ON C.IdConvocatoria = I.Convocatoria  WHERE C.IdConvocatoria = @Convocatoria

	if @inscriptos > 0 
	begin
		print 'borro los puntajes de la convocatoria ' +  cast(@convocatoria as varchar)
		DELETE CI
		FROM tb_CalificacionesDeInscripcion CI 
		INNER JOIN tb_InscripcionesConvocatorias I ON I.IdInscripcionConvocatoria = CI.Inscripcion
		INNER JOIN tb_Convocatorias C ON C.IdConvocatoria = I.Convocatoria
		INNER JOIN tb_Agentes A ON A.IdAgente = I.Agente
		WHERE C.IdConvocatoria = @Convocatoria  AND I.Nivel = @Nivel AND I.Ciclo = @Ciclo
	END
              END
*/	
	DECLARE X CURSOR FOR

	SELECT CP.FormulaPuntaje, CP.IDConcepto, IC.IdInscripcionConvocatoria
	FROM tb_ConceptosDePuntaje CP INNER JOIN tb_TiposDeConvocatorias TC ON CP.TipoConvocatoria = TC.IdTipoConvocatoria 
	INNER JOIN tb_Convocatorias C ON C.TipoConvocatoria = TC.IdTipoConvocatoria
	INNER JOIN tb_InscripcionesConvocatorias IC ON IC.Convocatoria = C.IdConvocatoria
	WHERE C.IdConvocatoria = @Convocatoria AND CP.FormulaPuntaje IS NOT NULL

	OPEN X

	FETCH NEXT FROM X INTO @Formula, @Concepto, @Inscripcion

	WHILE @@FETCH_STATUS = 0   BEGIN -- and @contador <500 
	
		-- Forma el sql dinamico con el llamado al concepto
		DECLARE @temp VARCHAR(8000)
		SELECT @temp = 'DECLARE @Puntaje FLOAT ' + CHAR(10) + 'SET @Puntaje = 0 ' + CHAR(10)
		SELECT @temp = @temp + 'EXEC ' +@Formula + ' ' + CONVERT(VARCHAR, @Inscripcion) + ', @Puntaje OUTPUT, 0' + CHAR(10)
		SELECT @temp = @temp + 'EXEC paAgregarCalificacionesDeInscripcion ' + CONVERT(VARCHAR, @Inscripcion) + ', ' + CONVERT(VARCHAR, @Concepto) + ', @Puntaje'
		print @temp
		-- Ejecuta el sql dinamico 
		EXEC(@temp)
		SET @Error = @@ERROR

		IF @Error <> 0 GOTO Salir

		FETCH NEXT FROM X INTO @Formula, @Concepto, @Inscripcion
	END

	CLOSE X
	DEALLOCATE X

	--  COMPLETA EL CONCEPTO PUNTAJE FINAL
	INSERT INTO tb_CalificacionesDeInscripcion(Inscripcion, Concepto, Puntaje)
	SELECT CI.Inscripcion, 234, SUM(CI.Puntaje)
	FROM tb_InscripcionesConvocatorias IC INNER JOIN tb_CalificacionesDeInscripcion CI ON IC.IdInscripcionConvocatoria = CI.Inscripcion
	WHERE IC.Convocatoria = @Convocatoria AND IC.Nivel = @Nivel AND IC.Ciclo = @Ciclo AND CI.Concepto NOT IN(245, 246, 247, 248, 234, 235, 191, 224, 473,331,332,333,334,535,536,537,538,539,540,541,542)
	GROUP BY CI.Inscripcion
	SET @Error = @@ERROR

	IF @Error <> 0 GOTO Salir

	--  COMPLETA EL CONCEPTO PUNTAJE ACRECENTAMINETO
	-- Falta cheuqear como lo calcula
	INSERT INTO tb_CalificacionesDeInscripcion(Inscripcion, Concepto, Puntaje)
	SELECT CI.Inscripcion, 235, SUM(CI.Puntaje)
	FROM tb_InscripcionesConvocatorias IC INNER JOIN tb_CalificacionesDeInscripcion CI ON IC.IdInscripcionConvocatoria = CI.Inscripcion
	WHERE IC.Convocatoria = @Convocatoria AND IC.Nivel = @Nivel AND IC.Ciclo = @Ciclo AND  CI.Concepto NOT IN(245, 246, 247, 248, 234, 235, 191, 224, 473,331,332,333,334,535,536,537,538,539,540,541,542)
	GROUP BY CI.Inscripcion
	SET @Error = @@ERROR

Salir:

IF @Error <> 0 
	ROLLBACK TRANSACTION
ELSE
	COMMIT TRANSACTION
GO
GRANT EXECUTE ON  [dbo].[paCalcularTodosLosPuntajes] TO [Juntas]
GO
